package experiment.e06.code;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/10/20 15:42
 * @package experiment.e06.code
 * @description 实验一
 * 对上机4中的Circle类，修改圆的半径的输入方式为从键盘上输入，为防止输入负数，
 * 请通过throws和throw设计出一旦出现负数时的异常处理方法，并通过本题的测试类进行测试。
 */

public class Ch01 {

}

class TestCircle{
    public static void main(String[] args) {
        try {
            Circle circle = new Circle(-4);
            System.out.println(circle);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}

/**
 * 圆类
 */
class Circle  {
    private double radius;
    private final double PI = Math.PI;

    public Circle() {
    }

    /**
     * 当半径为负数时候，抛出异常
     * @param radius
     * @throws IllegalArgumentException
     */
    public Circle(double radius) throws IllegalArgumentException {
        if (radius < 0){
            throw new IllegalArgumentException("radius 不能为负数");
        }
        this.radius = radius;
    }

    /**
     * 求一个形状的面积
     *
     * @return
     */
    public double getArea() {
        return radius * PI * radius;
    }

    /**
     * 求一个形状的周长
     *
     * @return
     */
    public double getPerimeter() {
        return 2 * PI * radius;
    }

    @Override
    public String toString() {
        return "Circle{" +
                "radius=" + radius +
                ", area=" + getArea() +
                ", perimeter=" + getPerimeter() +
                '}';
    }
}
